<?php
/**
* @version		1.0 msTable.php marum56
* @package		Joomla.Framework
* @subpackage	Table
* @copyright	Copyright (C) 2010 Open Source, All rights reserved.
*/

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

/**
 * Klasa bazowa dla klas odwzorowujacych tabele bazy danych.
 *
 * @package 	Joomla.Framework
 * @subpackage		Table
 * @since	1.0
 */
class msTable extends JTable
{
	/**
	* @param database A database connector object
	*/
	function __construct( $nameTable, $key, &$db )
	{
		parent::__construct( $nameTable, $key, $db );
	}
	
	/** 
	 * Metoda porównuje wlasciwosci dwoch obiektow.
	 *
	 * @return int -1 blad odczytu tabeli
	 *              0 obiekty nie rowne
	 *              1 obiekty sa rowne
	 */
	function compareObjects()
	{	
		// Nowa tabela - usun niepotrzebne pola
		unset($this->whoRegister);
		unset($this->registerDate);
		$newTable = $this->getProperties();
	
		// Numer identyfikujący grupę
		$gid = $this->gid;
		
		/*
		 * Zaladuj obiekt tabeli, tabelą z BD
		 */		
		$db =& JFactory::getDBO();
		$class = get_class($this);
	        $oldObject =&  new $class($db);
		if(!$oldObject->load($gid)) {
			JError::raiseWarning( 'SOME_ERROR_CODE', get_class( $this ).'::campareObject(): Nie można załadować rekordu z nr:'. $gid);
			return -1;
		}		
		// Stara tabela - usun niepotrzebne pola
		unset($oldObject->whoRegister);
		unset($oldObject->registerDate);
		$oldTable = $oldObject->getProperties();
		
//***************	
// Display tabela nowa i stara
/*		global $mainframe;
		$newTable = $this->getProperties();
		$i = 1;
		$mm = 'nowy</br>';
		foreach ($newTable as $k => $v)
		{
			$mm .= $i++.') ['.$k.'] ='.$v.'</br>';	
		}
		$mainframe->enqueueMessage($mm, 'message');
		
		$oldTable = $oldObject->getProperties();
		$i = 1;
		$mm = 'stary</br>';
		foreach ($oldTable as $k => $v)
		{
			$mm .= $i++.') ['.$k.'] ='.$v.'</br>';	
		}
		$mainframe->enqueueMessage($mm, 'message');
*/
//******************		
		
		// Sprawdzenie czy tabele sie roznia
		foreach ($newTable as $k => $v) 
		{ 
			if ($v != $oldTable[$k]) {
				return 0;
			}
		}
		return 1;
	}
	
	
	/**
	 * Laduje rekord z bazy danych i binduje pola do właściwości obiektu
	 *
	 * @access	public
	 * @param	mixed	$oid Numer identyfikujący grupę do zaladowania
	 * @return	boolean	True if successful
	 */
	function load( $oid=null )
	{
		$k = $this->_tbl_key;

		if ($oid !== null) {
			$this->$k = $oid;
		}

		$oid = $this->$k;

		if ($oid === null) {
			return false;
		}
		$this->reset();

		$db =& $this->getDBO();
		
//		global $mainframe;
//		$mainframe->enqueueMessage($oid, 'message');

		// Pobiera najmlodszy rekord dla danej grupy rekordów
		$query = 'SELECT *'
		. ' FROM '.$this->_tbl.' AS a '
		. ' WHERE '.$this->_tbl_key.' = '.$db->Quote($oid)
		. ' AND a.registerDate = (SELECT max(registerDate) 
		                          FROM '.$this->_tbl.' 
		                          WHERE '.$this->_tbl_key.' = a.'.$this->_tbl_key.')'
		                          ;
		$db->setQuery($query) ;

		if ($result = $db->loadAssoc( )) {
			return $this->bind($result);
		}
		else {
			$this->setError($db->getErrorMsg());
			return false;
		}
	}	

	/**
	 * Dodaje rekord do tablicy BD
	 *
	 * @param	int $isEqualObjects Czy dodac rekord - domyslnie dodaje.
	 * @return	boolean	True if successful
	 */
	function store( $isEqualObjects=0 )
	{
		$ret = true;

		if (!$isEqualObjects) {
			// new record
			$ret = $this->_db->insertObject($this->_tbl, $this, $this->_tbl_key);		
		}

		if (!$ret) {
			$this->setError( get_class($this).'::store(): Zapis do BD nieudany' . '<br />' . $this->_db->getErrorMsg() );
			return false;
		}
		else {
			return true;
		}
	}
	
}
